C++ Developer: углубленный уровень разработки на C++ от Otus
Вы научитесь
Программа курса
Онлайн-курс познакомит вас с особенностями разработки программного обеспечения на С++, после чего вы закрепите полученные знания на практике и разработаете итоговый проект.
Современный C++
Познакомитесь с принципами CI/CD, настроите стенд для выполнения ДЗ, а также рассмотрите возможности автоматизации сборки. Изучите online-инструменты С++, поработаете со спецификаторами, замыканиями и кортежами, а также в качестве практики отфильтруете IP-адреса. Узнаете, зачем использовать rvalue и lvalue ссылки, обсудите особенности простых структур данных в Си. Освежите знания о семантике перемещения, пользовательских литералах и двоичных константах, разберёте детали некоторых операторов. Поймёте, как управлять ресурсами, а также получите представление об области видимости и времени жизни shared_ptr и unique_ptr. Оцените важность стратегий аллокации памяти и научитесь самстоятельно писать контейнер и реализовывать Std::allocator. Познакомитесь с метафункциями, рекурсией и механизмом, связанным с шаблонами и перегрузкой функций. Узнаете, в каких случаях используются constexpr lambda и fold expression, а также изучите атрибуты и параметры автошаблонов Узнаете, что такое "неопределённое поведение", и какой алгорим работы с ним необходимо применить. Познакомитесь с нововведениями стандарта С++20 и поймёте, как применять их в реальной практике программирования.
Познакомитесь с принципами CI/CD, настроите стенд для выполнения ДЗ, а также рассмотрите возможности автоматизации сборки.
Изучите online-инструменты С++, поработаете со спецификаторами, замыканиями и кортежами, а также в качестве практики отфильтруете IP-адреса.
Узнаете, зачем использовать rvalue и lvalue ссылки, обсудите особенности простых структур данных в Си.
Освежите знания о семантике перемещения, пользовательских литералах и двоичных константах, разберёте детали некоторых операторов.
Поймёте, как управлять ресурсами, а также получите представление об области видимости и времени жизни shared_ptr и unique_ptr.
Оцените важность стратегий аллокации памяти и научитесь самстоятельно писать контейнер и реализовывать Std::allocator.
Познакомитесь с метафункциями, рекурсией и механизмом, связанным с шаблонами и перегрузкой функций.
Узнаете, в каких случаях используются constexpr lambda и fold expression, а также изучите атрибуты и параметры автошаблонов
Узнаете, что такое "неопределённое поведение", и какой алгорим работы с ним необходимо применить.
Познакомитесь с нововведениями стандарта С++20 и поймёте, как применять их в реальной практике программирования.
Архитектура
Научитесь читать UML-диаграммы, а также узнаете, для чего нужно использовать такие принципы, как SoC, DRY, YAGNI, KISS, TDA, LoD, SOLID. Познакомитесь с паттернами, решающими общие задачи программирования, а также сможете выявлять ошибки в архитектурных деталях кода. Освоите такие паттерны, как одиночка, пул одиночек, фабричный метод, абстрактная фабрика, ленивая инициализация и другие. Разберёте структурные паттерны: адаптер, мост, компоновщик, декоратор, фасад, приспособленец и заместитель. Сможете использовать паттерны поведения: команда, интерпретатор, итератор, посредник, хранитель и цепочка ответственности. Примените на практике паттерны: наблюдатель, состояние, стратегия, шаблонный метод и посетитель. Обработаете последовательность команд с помощью настройки поведения ассоциативных контейнеров. Сможете использовать алгоритмы поиска, сортировки, модификации и перестановки, узнаете об отличительных особенностях каждого типа. Перечислите принципы размещения элементов в двоичном дереве, выполните балансировку и удаление компонентов. Разберётесь в философии проекта, познакомитесь с документацией по нему, а также научитесь выбирать и применять библиотеки. Реализуете паттерны проектирования фабрика, слот-сигнал и легковес, а также детально проработаете принципы использования библиотек Boost::fusion. Научитесь создавать хэш-функции для разных объектов и добавлять данные в хэш-таблицы методом цепочек.
Научитесь читать UML-диаграммы, а также узнаете, для чего нужно использовать такие принципы, как SoC, DRY, YAGNI, KISS, TDA, LoD, SOLID.
Познакомитесь с паттернами, решающими общие задачи программирования, а также сможете выявлять ошибки в архитектурных деталях кода.
Освоите такие паттерны, как одиночка, пул одиночек, фабричный метод, абстрактная фабрика, ленивая инициализация и другие.
Разберёте структурные паттерны: адаптер, мост, компоновщик, декоратор, фасад, приспособленец и заместитель.
Сможете использовать паттерны поведения: команда, интерпретатор, итератор, посредник, хранитель и цепочка ответственности.
Примените на практике паттерны: наблюдатель, состояние, стратегия, шаблонный метод и посетитель.
Обработаете последовательность команд с помощью настройки поведения ассоциативных контейнеров.
Сможете использовать алгоритмы поиска, сортировки, модификации и перестановки, узнаете об отличительных особенностях каждого типа.
Перечислите принципы размещения элементов в двоичном дереве, выполните балансировку и удаление компонентов.
Разберётесь в философии проекта, познакомитесь с документацией по нему, а также научитесь выбирать и применять библиотеки.
Реализуете паттерны проектирования фабрика, слот-сигнал и легковес, а также детально проработаете принципы использования библиотек Boost::fusion.
Научитесь создавать хэш-функции для разных объектов и добавлять данные в хэш-таблицы методом цепочек.
Параллельные вычисления
Научитесь применять в приложениях потоки, выполняемые параллельно, а также сможете решать проблемы с помощью стандартных библиотек. Рассмотрите многопоточные паттерны, которые вы сможете использовать для решения прикладных задач. Изучите отличия асинхронности от многопоточности и параллельности, начнёте решать задачи по обработке команд с помощью освоенных паттернов. Познакомитесь с подходом lock-free, поймёте, что такое атомарность и неблокирующие структуры данных. Реализуете в коде атомарные операции при помощи (std::atomic), а также узнаете о принципах упорядочения памяти.
Научитесь применять в приложениях потоки, выполняемые параллельно, а также сможете решать проблемы с помощью стандартных библиотек.
Рассмотрите многопоточные паттерны, которые вы сможете использовать для решения прикладных задач.
Изучите отличия асинхронности от многопоточности и параллельности, начнёте решать задачи по обработке команд с помощью освоенных паттернов.
Познакомитесь с подходом lock-free, поймёте, что такое атомарность и неблокирующие структуры данных.
Реализуете в коде атомарные операции при помощи (std::atomic), а также узнаете о принципах упорядочения памяти.
Сеть
Освежите знания о TCP/IP, сокетах, сериализации и OSI/ISO, а также узнаете, для чего использовать сеть в приложениях на С++. Подберёте подходящие библиотеки и инструменты для работы с сетью, рассмотрите практики работы с неблокирующей передачей данных.
Освежите знания о TCP/IP, сокетах, сериализации и OSI/ISO, а также узнаете, для чего использовать сеть в приложениях на С++.
Подберёте подходящие библиотеки и инструменты для работы с сетью, рассмотрите практики работы с неблокирующей передачей данных.
Хранилища
Научитесь использовать хранилища данных, освежите знание языка SQL и реляционной алгебры, а также разберёте пример кода SQLite. Познакомитесь с понятием NoSQL, научитесь решать проблемы доступности и масштабируемости для документоориентированных и графовых БД. Рассмотрите принципы идеологии map reduce, используемой для параллельных вычислений над огромными наборами данных. Научитесь применять объектно-реляционное преобразование в своих проектах, освоите паттерны DAO и Repository.
Научитесь использовать хранилища данных, освежите знание языка SQL и реляционной алгебры, а также разберёте пример кода SQLite.
Познакомитесь с понятием NoSQL, научитесь решать проблемы доступности и масштабируемости для документоориентированных и графовых БД.
Рассмотрите принципы идеологии map reduce, используемой для параллельных вычислений над огромными наборами данных.
Научитесь применять объектно-реляционное преобразование в своих проектах, освоите паттерны DAO и Repository.
ML
Научитесь решать задачи машинного обучения, познакомитесь с документацией Dlib и процессом кластеризации. Сможете проводить тематическое моделирование и прогнозировать данные на базе решений линейной регрессии.
Научитесь решать задачи машинного обучения, познакомитесь с документацией Dlib и процессом кластеризации.
Сможете проводить тематическое моделирование и прогнозировать данные на базе решений линейной регрессии.
Проектная работа
Подберёте тему итогового проекта, опишете требования к реализации, архитектурные решения и начнёте программировать. Получите возможность задать вопросы и проконсультироваться по темам, вызывающим затруднения. Презентуете готовый проект комиссии и продемонстрируете возможности разработанного решения. Узнаете о том, как построено дальнейшее взаимодействие с преподавателями, а также обсудите карьерные перспективы для выпускников курса.
Подберёте тему итогового проекта, опишете требования к реализации, архитектурные решения и начнёте программировать.
Получите возможность задать вопросы и проконсультироваться по темам, вызывающим затруднения.
Презентуете готовый проект комиссии и продемонстрируете возможности разработанного решения.
Узнаете о том, как построено дальнейшее взаимодействие с преподавателями, а также обсудите карьерные перспективы для выпускников курса.